/*
	通用的ajax请求函数
	@param type: get    post   请求类型
	@param url: 	请求接口地址
	@param isAsync: true false  是否异步
	@param data: object
	@param callback: function
*/

function doAjax(type, url, isAsync, data, callback){
	// 创建通信对象
	var xhr = createXhr();

	// 判断通信类型
	if (type.toLowerCase() === "get") {
		// 遍历拼接数据到url
		url += "?";
		for(var n in data){
			url += n + "=" + data[n] + "&";
		}
		// 去掉最后多余的&
		url = url.substr(0, url.length - 1);
		// 释放data  get发送为null
		data = null;
	}else{
		data = JSON.stringify(data);
	}

	// 初始化通信对象
	xhr.open(type, url, isAsync);
	// 发送请求
	xhr.send(data);

	// 监听readyState变化
	xhr.onreadystatechange = function(){
		if (xhr.status>=200 && xhr.status<300 || xhr.status==304) {  //在这个区间，表示的通信正常
			if (xhr.readyState === 4) {
				var data = JSON.parse(xhr.responseText);   //接收到的返回数据
				// 将数据传递给回调函数
				callback && callback(data);  //判断回调函数的有效性的识别
			}
		}
	};
}

// 创建通信对象(解决浏览器不兼容的问题)
function createXhr(){
	// 大部分浏览器中使用XMLHttpRequest创建通信对象
	if (typeof XMLHttpRequest !== "undefined") {
		return new XMLHttpRequest();
	}else{
		// IE6及IE6以下不支持XMLHttpRequest，这些浏览器使用ActiveObject创建通信对象，在创建对象时需要根据浏览器的具体版本传入不同的参数，如下："MSXML.XMLHttp.6.0","MSXML.XMLHttp.3.0","MSXML.XMLHttp", "Microsoft.XMLHTTP"
		var args = ["MSXML.XMLHttp.6.0","MSXML.XMLHttp.3.0","MSXML.XMLHttp", "Microsoft.XMLHTTP"];
		for(var n = 0; n < args.length; n++){
			// 异常处理
			try{
				var xhr = new ActiveXObject(args[n]);
				return xhr;
			}catch(e){
				console.log(e);
			}
		}
	}
}